﻿package com.Galaxisfarm {
	// Bibliotecas da game engine Flixel
	import com.adamatomic.flixel.*;
	import flash.geom.Point;
	
	public class PhaseTwoState extends PhaseState {		
		// Variável que indica se houver colisão
		private var _has_overlap:Boolean = false;
		// Celeiro
		private var _cowshed_phase:Cowshed;
		
		// Método construtor
		public function PhaseTwoState():void {
			// Chama o construtor da classe herdada
			super();
			
			// Roda o script lua
			runScriptLua("phase_two.lua");
			
			// Mensagem de instrução
			dialogBoxDefault("Fase 2\nSeu objetivo é construir o celeiro.");
			
			// Animações do celeiro
			_cowshed_phase = new Cowshed(20, 20, FlxG.mouse);
			_cowshed_phase.visible = false;
			_lyr_sprites.add(_cowshed_phase);
			
			// Cria o celeiro e deixa oculto
			createCowshedHidden();
			
			addVersionBeta();
		}
		
		// Método que cria o botão concluído
		public function createButtonCompleted(X:uint, Y:uint):void {
			var buttonCompleted:FlxButton = new FlxButton(
				X, 
				Y, 
				new FlxSprite(null, 0, 0, false, false, 65, 18, 0xff25155E), 
				onClickButtonCompleted, 
				new FlxSprite(null, 0, 0, false, false, 65, 18, 0xffE46713), 
				new FlxText(0, 1, 65, 18, "Concluído", 0xffffff, null, 10, "center"),
				new FlxText(0, 1, 65, 18, "Concluído", 0xffffff, null, 10, "center"));
			_lyr_sprites.add(buttonCompleted);
		}
		
		// Método chamado quando o botão de
		// concluído é clicado
		private function onClickButtonCompleted():void {
			// Verifica se foi construído o celeiro
			if (!_cowshed.visible) {
				dialogBoxError("Você deve construir o celeiro.");
			} else {
				// Define o celeiro na fazenda
				Farm.setCowshed(_cowshed);
				
				// Vai para terceira fase
				FlxG.switchState(PhaseThreeState);
			}
		}
		
		// Método chamado constantemente
		override public function update():void {
			super.update();
			
			// Verifica se o aceleiro acabou de ser
			// adicionado no cenário
			var addCowshedNow:Boolean = false;
			
			// Verifica se o botão para adicionar
			// o celeiro foi criado
			if (_button_add_cowshed != null) {
				// Verifica se o botão foi pressionado
				if (_button_add_cowshed.on()) {
					// Celeiro já foi criado
					if (_cowshed.visible) {
						// Remove o celeiro
						_cowshed.visible = false;
						
						// Aumenta o valor do celeiro no dinheiro
						Farm.setMoney(Farm.getMoney() + getCowshedPrice());
					} else {
						// Obtém as árvores criadas
						var trees:FlxArray = Farm.getTrees();
					
						// Verifica se houve colisão
						_has_overlap = false;
						for each (var tree:* in trees) {
							for each (var cowshed_point:Point in _cowshed_phase.getCollidePoints()) {
								if (tree.overlapsPoint(cowshed_point.x, cowshed_point.y, false)) {
									_has_overlap = true;
									break;
								}
							}
						}
					
						if (!_has_overlap) {
							// Verifica se existe colisão com o painel de ação
							if (_action_panel != null) {
								if (_cowshed_phase.overlaps(_action_panel)) {
									_has_overlap = true;
								}
							}
						}
					
						// Exibe o curso com o celeiro
						// no caso de colisão ou não
						if (_has_overlap) {
							_cowshed_phase.play("not");
						} else {
							_cowshed_phase.play("selected");
						}
						_cowshed_phase.visible = true;
						
						// Captura o click do mouse
						// e não houve colisão do celeiro com as árvores
						if (FlxG.justPressed(FlxG.MOUSE) && !_has_overlap) {
							if (!_cowshed.visible) {
								// Verifica se tem dinheiro suficiente para construir o celeiro
								if ((Farm.getMoney() - getCowshedPrice()) > 0) {
									_cowshed.x = _cowshed_phase.x;
									_cowshed.y = _cowshed_phase.y;
									_cowshed.visible = true;
									_button_add_cowshed.switchOff();
									addCowshedNow = true;
									
									// Diminui o valor do celeiro no dinheiro
									Farm.setMoney(Farm.getMoney() - getCowshedPrice());
								} else {
									// Exibe mensagem de dinheiro insuficiente
									dialogBoxError("Você não possui dinheiro\nsuficiente para construir\no celeiro.");
								}
							}
						}
						
						// Atualiza posição do sprite pelo deslocamento do mouse
						_cowshed_phase.updatePositionByMouse();
					}
				} else {
					// Se o botão não estiver pressionado
					// esconde os cursores do mouse
					_cowshed_phase.visible = false;
				}
			}
			
			// Verifica se o foi clicado no celeiro
			// para mudar a sua posição
			if (!addCowshedNow) {
				if (FlxG.justPressed(FlxG.MOUSE) && _cowshed.visible && _cowshed.overlapsPoint(FlxG.mouse.x, FlxG.mouse.y)) {
					_button_add_cowshed.switchOn();
					_cowshed.visible = false;
					
					// Aumenta o valor do celeiro no dinheiro
					Farm.setMoney(Farm.getMoney() + getCowshedPrice());
				}
			}
		}
	}
}